package io.github.wanggit.antrpc.client.spring;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

/**
 *
 *
 * <pre>
 * 为了解决 Spring Bean的依赖关系:
 * 比如： A -&gt; B -&gt; C
 * 而B为对外发起 RPC 调用，那么AntRpc会给B生成一个动态代理对象 B1。
 * 需要把A中的原B的引用替换为B1，并保证B1有效的持有C的引用
 * </pre>
 */
public interface CallerProxyFactory {

    /**
     * 发起RPC的调用者生成代理对象，并保证依赖关系上下游不受影响
     *
     * @param name spring bean name
     * @param bean spring bean
     * @param beanFactory spring bean factory
     * @param callerProxyMethodInterceptor cglib method interceptor
     * @return proxyed bean
     */
    Object proxy(
            String name,
            Object bean,
            ConfigurableListableBeanFactory beanFactory,
            CallerProxyMethodInterceptor callerProxyMethodInterceptor);
}
